package org.example.demosql.Controller;


import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.example.demosql.ResponseHttps.ResponseData;
import org.example.demosql.SQL.Entity.User;
import org.example.demosql.SQL.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Tag(name = "查询操作",description = "查询所有用户")
@RestController
@RequestMapping("/selectUser")
public class SelectUserController {
    @Autowired
    private UserService userService;

    @Operation(summary = "查询所有用户")
    @GetMapping("/selectAllUser")
    public ResponseData selectAllUser(){
        return new ResponseData("200","查询成功",true,userService.getAllUsers());
    }

    @Operation(summary = "根据id查询用户")
    @GetMapping("/getUserById/{id}")
    public ResponseData getUserById(@PathVariable("id") Integer id){
        User user = userService.getUserById(id);
        String msg = user == null ? "用户不存在" : "查询成功";
        return new ResponseData("200",msg,true,user);
    }

    // API 接口：通过多个 ID 批量查询用户信息
    @Operation(summary = "根据id批量查询用户") // 这是一个Swagger注解，用来描述接口的基本信息。
    @GetMapping("/batch") // 映射HTTP GET请求到这个方法，并将路径设置为`/batch`。
    public ResponseData getUsersByBatchIds(@RequestParam List<Long> id) {
        List<User> userList = userService.getUsersByIds(id); // 调用我们之前定义的`getUsersByIds`方法，执行批量查询。
        String msg = userList.isEmpty() ? "用户不存在" : "查询成功";
        return new ResponseData("200", msg, true, userList); // 将查询结果包装到一个`ResponseData`对象中返回，该对象包含状态码（"200"表示成功）、消息、布尔值表示操作成功与否以及数据本身。
    }

    // 根据多个条件查询结果的
    @Operation(summary = "根据条件查询用户")
    @GetMapping("/selectByMap")
    public ResponseData selectByMap(@Parameter(description = "用户名称", required = true) @RequestParam String name,@Parameter(description = "用户性别", required = true) @RequestParam String gender){
        List<User> userList = userService.selectByMap(name, gender);
        String msg = userList.isEmpty() ? "用户不存在" : "查询成功";
        return new ResponseData("200",msg,true,userList);
    }

    // 根据ID删除用户
    @Operation(summary = "根据id删除用户")
    @DeleteMapping("/deleteUser/{id}")
    public ResponseData deleteUser(@PathVariable("id") Integer id){
        boolean flag = userService.removeById(id);
        String msg = flag ? "删除成功" : "删除失败";
        return new ResponseData("200",msg,true,flag);
    }
}
